enhance faketime option to allow subsecond steps. (#944)
authortsteven4 <13596209+tsteven4@users.noreply.github.com>
Mon, 7 Nov 2022 11:54:56 +0000 (04:54 -0700)
committerGitHub <noreply@github.com>
Mon, 7 Nov 2022 11:54:56 +0000 (04:54 -0700)
reference/track/simint1000m.csv [new file with mode: 0644]
reference/track/simint250m.csv [new file with mode: 0644]
testo.d/track.test
trackfilter.cc
trackfilter.h

diff --git a/reference/track/simint1000m.csv b/reference/track/simint1000m.csv
new file mode 100644 (file)
index 0000000..4de8a12
--- /dev/null
@@ -0,0 +1,96 @@
+No,Latitude,Longitude,Date,Time\r
+1,66.000103,-179.979040,2022/01/01,00:00:00\r
+2,66.000146,-179.979035,2022/01/01,00:00:01\r
+3,66.000188,-179.979030,2022/01/01,00:00:02\r
+4,66.000106,-179.979250,2022/01/01,00:00:03\r
+5,66.000023,-179.979470,2022/01/01,00:00:04\r
+6,66.000034,-179.979775,2022/01/01,00:00:05\r
+7,66.000045,-179.980080,2022/01/01,00:00:06\r
+8,66.000111,-179.980280,2022/01/01,00:00:07\r
+9,66.000177,-179.980480,2022/01/01,00:00:08\r
+10,66.000143,-179.980575,2022/01/01,00:00:09\r
+11,66.000109,-179.980670,2022/01/01,00:00:10\r
+12,66.000138,-179.981320,2022/01/01,00:00:11\r
+13,66.000167,-179.981970,2022/01/01,00:00:12\r
+14,66.000121,-179.982585,2022/01/01,00:00:13\r
+15,66.000075,-179.983200,2022/01/01,00:00:14\r
+16,66.000105,-179.983745,2022/01/01,00:00:15\r
+17,66.000134,-179.984290,2022/01/01,00:00:16\r
+18,66.000128,-179.984740,2022/01/01,00:00:17\r
+19,66.000121,-179.985190,2022/01/01,00:00:18\r
+20,66.000159,-179.985385,2022/01/01,00:00:19\r
+21,66.000197,-179.985580,2022/01/01,00:00:20\r
+22,66.000177,-179.986145,2022/01/01,00:00:21\r
+23,66.000158,-179.986710,2022/01/01,00:00:22\r
+24,66.000148,-179.987380,2022/01/01,00:00:23\r
+25,66.000138,-179.988050,2022/01/01,00:00:24\r
+26,66.000154,-179.988555,2022/01/01,00:00:25\r
+27,66.000171,-179.989060,2022/01/01,00:00:26\r
+28,66.000111,-179.989380,2022/01/01,00:00:27\r
+29,66.000050,-179.989700,2022/01/01,00:00:28\r
+30,66.000058,-179.990500,2022/01/01,00:00:29\r
+31,66.000066,-179.991300,2022/01/01,00:00:30\r
+32,66.000056,-179.991565,2022/01/01,00:00:31\r
+33,66.000046,-179.991830,2022/01/01,00:00:32\r
+34,66.000089,-179.992615,2022/01/01,00:00:33\r
+35,66.000131,-179.993400,2022/01/01,00:00:34\r
+36,66.000110,-179.993620,2022/01/01,00:00:35\r
+37,66.000088,-179.993840,2022/01/01,00:00:36\r
+38,66.000127,-179.994440,2022/01/01,00:00:37\r
+39,66.000165,-179.995040,2022/01/01,00:00:38\r
+40,66.000180,-179.995500,2022/01/01,00:00:39\r
+41,66.000196,-179.995960,2022/01/01,00:00:40\r
+42,66.000177,-179.996665,2022/01/01,00:00:41\r
+43,66.000158,-179.997370,2022/01/01,00:00:42\r
+44,66.000130,-179.997675,2022/01/01,00:00:43\r
+45,66.000103,-179.997980,2022/01/01,00:00:44\r
+46,66.000104,-179.998505,2022/01/01,00:00:45\r
+47,66.000106,-179.999030,2022/01/01,00:00:46\r
+48,66.000082,-179.999295,2022/01/01,00:00:47\r
+49,66.000057,-179.999560,2022/01/01,00:00:48\r
+50,66.000050,179.999795,2022/01/01,00:00:49\r
+51,66.000042,179.999150,2022/01/01,00:00:50\r
+52,66.000096,179.998730,2022/01/01,00:00:51\r
+53,66.000150,179.998310,2022/01/01,00:00:52\r
+54,66.000172,179.997530,2022/01/01,00:00:53\r
+55,66.000193,179.996750,2022/01/01,00:00:54\r
+56,66.000160,179.996480,2022/01/01,00:00:55\r
+57,66.000128,179.996210,2022/01/01,00:00:56\r
+58,66.000110,179.995570,2022/01/01,00:00:57\r
+59,66.000091,179.994930,2022/01/01,00:00:58\r
+60,66.000141,179.994275,2022/01/01,00:00:59\r
+61,66.000191,179.993620,2022/01/01,00:01:00\r
+62,66.000124,179.993275,2022/01/01,00:01:01\r
+63,66.000057,179.992930,2022/01/01,00:01:02\r
+64,66.000077,179.992520,2022/01/01,00:01:03\r
+65,66.000098,179.992110,2022/01/01,00:01:04\r
+66,66.000069,179.991745,2022/01/01,00:01:05\r
+67,66.000040,179.991380,2022/01/01,00:01:06\r
+68,66.000077,179.990915,2022/01/01,00:01:07\r
+69,66.000114,179.990450,2022/01/01,00:01:08\r
+70,66.000096,179.989495,2022/01/01,00:01:09\r
+71,66.000077,179.988540,2022/01/01,00:01:10\r
+72,66.000045,179.988185,2022/01/01,00:01:11\r
+73,66.000013,179.987830,2022/01/01,00:01:12\r
+74,66.000095,179.987410,2022/01/01,00:01:13\r
+75,66.000176,179.986990,2022/01/01,00:01:14\r
+76,66.000098,179.986525,2022/01/01,00:01:15\r
+77,66.000021,179.986060,2022/01/01,00:01:16\r
+78,66.000057,179.985720,2022/01/01,00:01:17\r
+79,66.000093,179.985380,2022/01/01,00:01:18\r
+80,66.000146,179.984835,2022/01/01,00:01:19\r
+81,66.000199,179.984290,2022/01/01,00:01:20\r
+82,66.000192,179.983700,2022/01/01,00:01:21\r
+83,66.000184,179.983110,2022/01/01,00:01:22\r
+84,66.000153,179.982810,2022/01/01,00:01:23\r
+85,66.000122,179.982510,2022/01/01,00:01:24\r
+86,66.000112,179.982165,2022/01/01,00:01:25\r
+87,66.000102,179.981820,2022/01/01,00:01:26\r
+88,66.000124,179.981825,2022/01/01,00:01:27\r
+89,66.000147,179.981830,2022/01/01,00:01:28\r
+90,66.000109,179.981790,2022/01/01,00:01:29\r
+91,66.000071,179.981750,2022/01/01,00:01:30\r
+92,66.000072,179.981765,2022/01/01,00:01:31\r
+93,66.000073,179.981780,2022/01/01,00:01:32\r
+94,66.000120,179.981700,2022/01/01,00:01:33\r
+95,66.000167,179.981620,2022/01/01,00:01:34\r
diff --git a/reference/track/simint250m.csv b/reference/track/simint250m.csv
new file mode 100644 (file)
index 0000000..e42ca12
--- /dev/null
@@ -0,0 +1,96 @@
+No,Latitude,Longitude,Date,Time\r
+1,66.000103,-179.979040,2022/01/01,00:00:00\r
+2,66.000146,-179.979035,2022/01/01,00:00:00.250\r
+3,66.000188,-179.979030,2022/01/01,00:00:00.500\r
+4,66.000106,-179.979250,2022/01/01,00:00:00.750\r
+5,66.000023,-179.979470,2022/01/01,00:00:01\r
+6,66.000034,-179.979775,2022/01/01,00:00:01.250\r
+7,66.000045,-179.980080,2022/01/01,00:00:01.500\r
+8,66.000111,-179.980280,2022/01/01,00:00:01.750\r
+9,66.000177,-179.980480,2022/01/01,00:00:02\r
+10,66.000143,-179.980575,2022/01/01,00:00:02.250\r
+11,66.000109,-179.980670,2022/01/01,00:00:02.500\r
+12,66.000138,-179.981320,2022/01/01,00:00:02.750\r
+13,66.000167,-179.981970,2022/01/01,00:00:03\r
+14,66.000121,-179.982585,2022/01/01,00:00:03.250\r
+15,66.000075,-179.983200,2022/01/01,00:00:03.500\r
+16,66.000105,-179.983745,2022/01/01,00:00:03.750\r
+17,66.000134,-179.984290,2022/01/01,00:00:04\r
+18,66.000128,-179.984740,2022/01/01,00:00:04.250\r
+19,66.000121,-179.985190,2022/01/01,00:00:04.500\r
+20,66.000159,-179.985385,2022/01/01,00:00:04.750\r
+21,66.000197,-179.985580,2022/01/01,00:00:05\r
+22,66.000177,-179.986145,2022/01/01,00:00:05.250\r
+23,66.000158,-179.986710,2022/01/01,00:00:05.500\r
+24,66.000148,-179.987380,2022/01/01,00:00:05.750\r
+25,66.000138,-179.988050,2022/01/01,00:00:06\r
+26,66.000154,-179.988555,2022/01/01,00:00:06.250\r
+27,66.000171,-179.989060,2022/01/01,00:00:06.500\r
+28,66.000111,-179.989380,2022/01/01,00:00:06.750\r
+29,66.000050,-179.989700,2022/01/01,00:00:07\r
+30,66.000058,-179.990500,2022/01/01,00:00:07.250\r
+31,66.000066,-179.991300,2022/01/01,00:00:07.500\r
+32,66.000056,-179.991565,2022/01/01,00:00:07.750\r
+33,66.000046,-179.991830,2022/01/01,00:00:08\r
+34,66.000089,-179.992615,2022/01/01,00:00:08.250\r
+35,66.000131,-179.993400,2022/01/01,00:00:08.500\r
+36,66.000110,-179.993620,2022/01/01,00:00:08.750\r
+37,66.000088,-179.993840,2022/01/01,00:00:09\r
+38,66.000127,-179.994440,2022/01/01,00:00:09.250\r
+39,66.000165,-179.995040,2022/01/01,00:00:09.500\r
+40,66.000180,-179.995500,2022/01/01,00:00:09.750\r
+41,66.000196,-179.995960,2022/01/01,00:00:10\r
+42,66.000177,-179.996665,2022/01/01,00:00:10.250\r
+43,66.000158,-179.997370,2022/01/01,00:00:10.500\r
+44,66.000130,-179.997675,2022/01/01,00:00:10.750\r
+45,66.000103,-179.997980,2022/01/01,00:00:11\r
+46,66.000104,-179.998505,2022/01/01,00:00:11.250\r
+47,66.000106,-179.999030,2022/01/01,00:00:11.500\r
+48,66.000082,-179.999295,2022/01/01,00:00:11.750\r
+49,66.000057,-179.999560,2022/01/01,00:00:12\r
+50,66.000050,179.999795,2022/01/01,00:00:12.250\r
+51,66.000042,179.999150,2022/01/01,00:00:12.500\r
+52,66.000096,179.998730,2022/01/01,00:00:12.750\r
+53,66.000150,179.998310,2022/01/01,00:00:13\r
+54,66.000172,179.997530,2022/01/01,00:00:13.250\r
+55,66.000193,179.996750,2022/01/01,00:00:13.500\r
+56,66.000160,179.996480,2022/01/01,00:00:13.750\r
+57,66.000128,179.996210,2022/01/01,00:00:14\r
+58,66.000110,179.995570,2022/01/01,00:00:14.250\r
+59,66.000091,179.994930,2022/01/01,00:00:14.500\r
+60,66.000141,179.994275,2022/01/01,00:00:14.750\r
+61,66.000191,179.993620,2022/01/01,00:00:15\r
+62,66.000124,179.993275,2022/01/01,00:00:15.250\r
+63,66.000057,179.992930,2022/01/01,00:00:15.500\r
+64,66.000077,179.992520,2022/01/01,00:00:15.750\r
+65,66.000098,179.992110,2022/01/01,00:00:16\r
+66,66.000069,179.991745,2022/01/01,00:00:16.250\r
+67,66.000040,179.991380,2022/01/01,00:00:16.500\r
+68,66.000077,179.990915,2022/01/01,00:00:16.750\r
+69,66.000114,179.990450,2022/01/01,00:00:17\r
+70,66.000096,179.989495,2022/01/01,00:00:17.250\r
+71,66.000077,179.988540,2022/01/01,00:00:17.500\r
+72,66.000045,179.988185,2022/01/01,00:00:17.750\r
+73,66.000013,179.987830,2022/01/01,00:00:18\r
+74,66.000095,179.987410,2022/01/01,00:00:18.250\r
+75,66.000176,179.986990,2022/01/01,00:00:18.500\r
+76,66.000098,179.986525,2022/01/01,00:00:18.750\r
+77,66.000021,179.986060,2022/01/01,00:00:19\r
+78,66.000057,179.985720,2022/01/01,00:00:19.250\r
+79,66.000093,179.985380,2022/01/01,00:00:19.500\r
+80,66.000146,179.984835,2022/01/01,00:00:19.750\r
+81,66.000199,179.984290,2022/01/01,00:00:20\r
+82,66.000192,179.983700,2022/01/01,00:00:20.250\r
+83,66.000184,179.983110,2022/01/01,00:00:20.500\r
+84,66.000153,179.982810,2022/01/01,00:00:20.750\r
+85,66.000122,179.982510,2022/01/01,00:00:21\r
+86,66.000112,179.982165,2022/01/01,00:00:21.250\r
+87,66.000102,179.981820,2022/01/01,00:00:21.500\r
+88,66.000124,179.981825,2022/01/01,00:00:21.750\r
+89,66.000147,179.981830,2022/01/01,00:00:22\r
+90,66.000109,179.981790,2022/01/01,00:00:22.250\r
+91,66.000071,179.981750,2022/01/01,00:00:22.500\r
+92,66.000072,179.981765,2022/01/01,00:00:22.750\r
+93,66.000073,179.981780,2022/01/01,00:00:23\r
+94,66.000120,179.981700,2022/01/01,00:00:23.250\r
+95,66.000167,179.981620,2022/01/01,00:00:23.500\r
index 90aea72d93182f4edba74df2be050a7cfd125792..cc1de5874d8f88a7bcac78f5014e64111afff1ad 100644 (file)
@@ -65,3 +65,13 @@ compare ${REFERENCE}/track/trackfilter_trk2seg~gpx.gpx ${TMPDIR}/trackfilter_trk
 # speed with msec
 gpsbabel -t -i unicsv -f ${REFERENCE}/track/utm_subsecond_track.csv -x track,speed -o unicsv,utc -F ${TMPDIR}/utm_subsecond_track~csv.csv
 compare ${REFERENCE}/track/utm_subsecond_track~csv.csv ${TMPDIR}/utm_subsecond_track~csv.csv
+
+# faketime, with and witout partial second steps
+gpsbabel -t -i unicsv -f ${REFERENCE}/track/simint.csv -x track,faketime=f2022+0.25 -o unicsv,utc -F ${TMPDIR}/simint250m.csv
+compare ${REFERENCE}/track/simint250m.csv ${TMPDIR}/simint250m.csv
+gpsbabel -t -i unicsv -f ${REFERENCE}/track/simint.csv -x track,faketime=f2022+.25 -o unicsv,utc -F ${TMPDIR}/simint250m_2.csv
+compare ${REFERENCE}/track/simint250m.csv ${TMPDIR}/simint250m_2.csv
+gpsbabel -t -i unicsv -f ${REFERENCE}/track/simint.csv -x track,faketime=f2022+1 -o unicsv,utc -F ${TMPDIR}/simint1000m.csv
+compare ${REFERENCE}/track/simint1000m.csv ${TMPDIR}/simint1000m.csv
+
+
index 2df3efb6f182beef80fdf61d2c88b8841b2ed335..d157249b20eefc5bd5e1f13a193e54451586cbc1 100644 (file)
@@ -826,7 +826,7 @@ TrackFilter::faketime_t TrackFilter::trackfilter_faketime_check(const char* time
 {
   faketime_t result;
 
-  static const QRegularExpression re(R"(^(f?)(\d{0,14})(?:\+(\d{1,10}))?$)");
+  static const QRegularExpression re(R"(^(f?)(\d{0,14})(?:\+(\d+(?:\.\d*)?|\.\d+))?$)");
   assert(re.isValid());
   QRegularExpressionMatch match = re.match(timestr);
   if (match.hasMatch()) {
@@ -843,7 +843,7 @@ TrackFilter::faketime_t TrackFilter::trackfilter_faketime_check(const char* time
 
     if (match.capturedLength(3) > 0) {
       bool ok;
-      result.step = match.captured(3).toInt(&ok);
+      result.step = llround(1000.0 * match.captured(3).toDouble(&ok));
       if (!ok) {
         fatal(MYNAME "-faketime-check: Invalid step \"%s\"!\n", qPrintable(match.captured(3)));
       }
@@ -852,7 +852,7 @@ TrackFilter::faketime_t TrackFilter::trackfilter_faketime_check(const char* time
     }
 
 #ifdef TRACKF_DBG
-    qDebug() << MYNAME "-faketime option: force =" << result.force << ", timestamp =" << result.start << ", step =" << result.step;
+    qDebug() << MYNAME "-faketime option: force =" << result.force << ", timestamp =" << result.start << ", step =" << result.step << "milliseconds";
 #endif
   } else {
     fatal(MYNAME "-faketime-check: Invalid value for faketime option \"%s\"!\n", timestr);
@@ -871,7 +871,7 @@ void TrackFilter::trackfilter_faketime()
 
       if (!wpt->creation_time.isValid() || faketime.force) {
         wpt->creation_time = faketime.start;
-        faketime.start = faketime.start.addSecs(faketime.step);
+        faketime.start = faketime.start.addMSecs(faketime.step);
       }
     }
   }
index 13d04669ea280e1af35068cfd8e075ebf60effb9..c76add21bd9b608cd936726897cb4e9c7e6da3b6 100644 (file)
@@ -212,7 +212,7 @@ private:
 
   struct faketime_t {
     QDateTime start;
-    int    step{0};
+    long long step{0};
     bool   force{false};
   };